home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / dev / asm / Asm_Course2.lha / Teil25.TXT < prev    next >
Text File  |  1993-09-01  |  14KB  |  422 lines

  1.           A S S E M B L E R - K U R S       (c)  Jeff Kandle 1990
  2.  
  3.                                 25.Teil...
  4.  
  5. So, noch ein paar Tips zum TDD und dann gehts weiter.
  6.  
  7. Ihr koennt natuerlich auch gepackte Files auf die Disk `Tracken`, und sie
  8. dann von dem TDD einladen lassen. Ich will mal kurz erklaeren wie da mit
  9. Bytekiller-Files gemacht wird.
  10.  
  11. 1. Demo/Intro packen.
  12. 2. Gepacktes File in den Speicher laden.
  13. 3. Ohne Hunks wieder abspeichern
  14. 4. Mit Amon auf die Disk Tracken.
  15. 5. TDD Bootblock schreiben.
  16.  
  17. Beim Bytekiller ist es so das die Decrunchroutine PC-Relativ geschrieben
  18. ist, und deshalb ueberall laeuft. Ihr koennt sie deshalb ueberall hinladen.
  19. Ausser halt dahin wo das entpackte liegt.
  20. Ich habe mir angewoehnt meine Intro`s immer erst ab $38000 zu beginnen.
  21. Dann habe ich immer knapp 100 KB zur verfuegung um darin das gepackte unter
  22. zu kriegen.
  23. Beim Bytekiller speziell sieht es so aus das die ersten 34 Bytes,
  24. Hunk_Codes sind. Deshalb muesst ihr wenn ihr das File geladen habt, mit dem
  25. Abspeichern um 34 Bytes spaeter beginnen.
  26.  
  27. Beispiel:
  28. Ihr habt das vom CLI lauffaehige Intro nach $40000 geladen, dann muestt ihr
  29. es ab $40022 abspeichern. Dann faengt es genau mit dem ersten Befehl der
  30. Entpackroutine an.
  31. Das mit dem Tracken muesst ihr dann selber ausrechnen. Bitte denkt daran,
  32. das ihr auch bei der Laenge auf die naechste 512($200) Byte aufrunden
  33. muesst. Bei anderen Werten kann es schwierigkeiten geben.
  34.  
  35. Wenn ihr euch jetzt ein bisschen mit der Bootblock-Programmierung
  36. beschaeftigt, dann empfehle ich euch das Studium der Librarys. Die
  37. Funktionen sind zwar sehr langsam, aber da wir ja nicht grosses machen ist
  38. es ganz nuetzlich sie zu kennen. Denn so ein Aufruf zu einer bestimmten
  39. Funktion ist sicherlich kuerzer als wie wenn man diese Funktion selber in
  40. den Bootblock schreibt.
  41.  
  42. Ich habe auf einer Diske noch einen Bootblock-Source gefunden. Er zeigt was
  43. man wenn man ein bisschen geschickt programmiert, alles mit dem Bootblock
  44. anstellen kann.
  45.  
  46. Ich habe den Source ein bisschen Editiert, aber nur die Befehle selber
  47. verrueckt und das ganze der lesbarkeit halber etwas auseinander gezogen.
  48. Den Rest habe ich so gelassen, denn wer einen solche Bootblock schreiben
  49. kann, der verdient es das man ihn erwaehnt.
  50.  
  51. Hier erstmal der Source...
  52.  
  53. ORG     $40000
  54. LOAD    $40000
  55.  
  56. Bootblock:
  57.         dc.b    "DOS",0
  58.         dc.l    0
  59.  
  60.  
  61.         dc.l    $00000370
  62.  
  63. ; Library Addressen und Offsets
  64.  
  65. Execbase=       4
  66.  
  67. OldOpenLibrary= -408
  68. InitBitMap=     -390
  69. InitRastPort=   -198
  70. ClearScreen=    -48
  71. RectFill=       -306
  72. FindResident=   -96
  73. ScrollRaster=   -396
  74. Text=   -60
  75.  
  76. ; ChipAddressen
  77.  
  78. OffsetBase=     $dff000
  79. VPOSR=  $6
  80. DMACON= $96
  81. BPL1MOD=        $108
  82. BPL2MOD=        $10a
  83. DIWSTRT=        $8E
  84. DIWSTOP=        $90
  85.  
  86. ; Konstanten
  87.  
  88. SETCLR= $8000
  89. DMAEN=  $100
  90. DIWSTRTV=       44
  91. DIWSTRTH=       129
  92. DIWSTOPV=       244
  93. DIWSTOPH=       193
  94.  
  95. ; Hardware Register
  96.  
  97. LeftMouseButton=        $bfe001
  98.  
  99. ; Tabellen
  100.  
  101. RastPort=       $70000
  102. BitMap= $70200
  103. Copperlist=     $7a000
  104. JumpAddr=       $6c
  105.  
  106. Start:  movem.l d0-d7/a0-a6,-(sp)       ; Alle Register auf Stack retten
  107.  
  108. ; graphics.library oeffnen
  109.  
  110.         Move.l  execbase,A6
  111.         Lea     Gfxlibname(PC),A1
  112.         Jsr     OldOpenLibrary(A6)      ;Graphics Library oeffnen
  113.         Move.l  D0,A6                   ;Gfxbase nach A6
  114.  
  115. ; Bildschirm Variable initialisieren
  116.  
  117.         Lea     OffsetBase,A0
  118.         Move.w  #SETCLR+DMAEN,DMACON(A0)
  119.         Move.w  #6,BPL1MOD(A0)
  120.         Move.w  #6,BPL2MOD(A0)
  121.         Move.w  #DIWSTRTV*$100+DIWSTRTH,DIWSTRT(A0)
  122.         Move.w  #DIWSTOPV*$100+DIWSTOPH,DIWSTOP(A0)
  123.  
  124. ; Init Copperlist
  125.  
  126.         Lea     Copperlist,A0
  127.         Move.l  #$00e00005,(A0)+        ; MOVE $5 -> BPL1PTH
  128.         Move.l  #$00e29000,(A0)+        ; MOVE $9000 -> BPL1PTL
  129.         Move.l  #$01001200,(A0)+        ; MOVE 1 -> BPU0 & 1 -> COLOR
  130.         Move.l  #$01800000,(A0)+        ; MOVE 0 -> COLOR0
  131.         Move.l  #$01820000,(A0)+        ; MOVE 0 -> COLOR1
  132.         Lea     Copperlist,A0
  133.         Move.l  A0,50(A6)               ; GfxBase+50
  134.  
  135. ; BitMap initialisieren
  136.  
  137.         Lea     BitMap,A0               ; BitMap
  138.         Move.w  #1,D0                   ; depth
  139.         Move.w  #368,D1                 ; width
  140.         Move.w  #220,D2                 ; height
  141.         Jsr     InitBitMap(A6)
  142.         Move.l  #$58e62,BitMap+8        ; erstes BitPlane
  143.  
  144. ; RastPort initialisieren
  145.  
  146.         Lea     RastPort,A1             ; rastport
  147.         Jsr     InitRastPort(A6)
  148.         Move.l  #BitMap,RastPort+4      ; BitMap Addresse -> RastPort
  149.         Jsr     ClearScreen(A6)         ; Bildschirm loeschen
  150.  
  151. ; Kaestchen in die Copperliste schreiben
  152.  
  153.         Lea     Copperlist+20,A0        ; Ende der Copperliste -> A0
  154.         Move.w  #175,D7
  155.         Move.l  #$2c09fffe,D5           ; WAIT 8, 44
  156. EinsVertikal:
  157.         Move.l  D5,D0
  158.         Move.w  #15,D6
  159. Horizontalline:
  160.         Move.l  D0,(A0)+
  161.         Move.l  #$1800000,(A0)+         ; MOVE $000 -> COLOR0
  162.         Addi.l  #$e0000,D0              ; WAIT Oldx+15, Oldy
  163.         Dbf     D6,Horizontalline
  164.         Addi.l  #$1000000,D5            ; WAIT 8, Oldy+1
  165.         Dbf     D7,EinsVertikal
  166.         Move.l  #28,D7                  ; Kaestchenhoehe = 10
  167.         Lea     Textscrollfeld(PC),A4
  168. AppendCopList:
  169.         Move.l  (A4)+,(A0)+             ; Scrollfeld malen anhaengen
  170.         Dbf     D7,AppendCopList
  171.  
  172. ; The P.R.O.F.I. auf BitMap malen
  173.  
  174.         Lea     BobTab(PC),A5
  175.         Move.w  #30,D7                  ; The PROFI = 31 Vierecke
  176. InitBob:
  177.         Lea     RastPort,A1             ; RastPort
  178.         Clr.l   D0                      ; xl
  179.         Clr.l   D1                      ; yl
  180.         Clr.l   D2                      ; xu
  181.         Clr.l   D3                      ; yu
  182.         Move.b  (A5)+,D0                ; xl
  183.         Addi.w  #25,D0                  ; xl+25
  184.         Move.b  (A5)+,D1                ; yl
  185.         Move.b  (A5)+,D2                ; xu
  186.         Addi.w  #25,D2                  ; xu+25
  187.         Move.b  (A5)+,D3                ; yu
  188.         Jsr     RectFill(A6)
  189.         Dbf     D7,InitBob
  190.  
  191. ; Farbtabelle spiegeln auf 44 Farben
  192.  
  193.         Lea     Farbtabelle(PC),A0
  194.         Lea     Farbtabelle+80(PC),A1
  195.         Move.w  #20,D7
  196. SpiegelFarbtabelleLoop3:
  197.         Move.w  (A0)+,-(A1)
  198.         Dbf     D7,SpiegelFarbtabelleLoop3
  199.  
  200.         Lea     Dummy(PC),A0
  201.         Move.l  JumpAddr,2(A0)          ; -> jmp ($6c)
  202.         Lea     TextScrollen(PC),A0
  203.         Move.l  A0,JumpAddr             ; -> jmp Textscrollen
  204.  
  205. Mainloop:
  206.  
  207. ; Farben in die Copperliste eintragen
  208.  
  209.         Move.w  #21,D7
  210.         Lea     Copperlist+26,A0
  211.         Lea     Farbtabelle(PC),A5
  212.         Move.w  (A5),-8(A0)
  213. FCLop0: Move.w  #7,D4
  214. FCLop1: Move.l  A5,A1
  215.         Move.w  #15,D6
  216. FCLop2: Move.w  (A1)+,(A0)
  217.         Addq.l  #8,A0
  218.         Dbf     D6,FCLop2
  219.         Dbf     D4,FCLop1
  220.         Addq.l  #2,A5
  221.         Dbf     D7,FCLop0
  222.  
  223. ; Farbtabelle rotieren
  224.  
  225.         Lea     Farbtabelle(PC),A0
  226.         Lea     Farbtabelle+2(PC),A1
  227.         Move.w  #38,D0
  228.         Move.w  (A0),D1                 ; farbe0 -> dummy
  229. RotateFarbtabelle:
  230.         Move.w  (A1)+,(A0)+
  231.         Dbf     D0,RotateFarbtabelle
  232.         Move.w  D1,-(A1)                ; dummy -> farbe44
  233.  
  234. ; Warten bis Elektronenstrahl in Zeile 64 ist (WaitTOF)
  235.  
  236. WaitTOF:
  237.         Cmpi.b  #64,OffsetBase+VPOSR
  238.         Bls.s   WaitTOF
  239.  
  240.         Btst    #6,LeftMouseButton      ; Mousebutton gedrueckt
  241.         Bne.s   MainLoop                ; falls nein -> Mainloop
  242.  
  243. ; Programm beenden
  244.  
  245.         Lea     Dummy+2(PC),A0
  246.         Move.l  (A0),JumpAddr
  247.         Lea     Dummy+10(PC),A1
  248.         Move.l  #$20646f73,(A1)         ; " dos"
  249.  
  250.         Movem.l (sp)+,d0-d7/a0-a6
  251.         Lea     Dummy+11(PC),A1         ; Name = dos.library
  252.         Jsr     FindResident(A6)
  253.         Move.l  D0,A0
  254.         Move.l  22(A0),A0
  255.         Clr.l   D0
  256.         Rts
  257.  
  258. TextScrollen:
  259.         Movem.l d0-d7/a0-a6,-(sp)
  260.         Lea     RastPort,A1             ; RastPort
  261.         Move.w  #1,D0                   ; dx
  262.         Clr.w   D1                      ; dy
  263.         Clr.w   D2                      ; minx
  264.         Move.w  #198,D3                 ; miny
  265.         Move.w  #351,D4                 ; maxx
  266.         Move.w  #206,D5                 ; maxy
  267.         Jsr     ScrollRaster(A6)
  268.         Lea     Scrolltext-2(PC),A0
  269.         Subi.b  #1,(A0)
  270.         Bne.s   Bra2
  271.         Move.b  #9,(A0)
  272.         Lea     Scrolltext-1(PC),A0
  273.         Eori.b  #1,(A0)
  274.         Lea     RastPort,A1
  275.         Move.w  #320,36(A1)             ; Current Pen Position x
  276.         Move.w  #205,38(A1)             ; Current Pen Position y
  277.         Lea     AktBuchstabe(PC),A2
  278.         Addq.b  #1,(A2)
  279.         Cmpi.b  #Textende-Scrolltext,(A2)       ;Anzahl der Buchstaben
  280.         Bne.s   PrintBuchstabe
  281.         Clr.b   (A2)
  282. PrintBuchstabe:
  283.         Lea     Scrolltext(PC),A0
  284.         Adda.w  -1(A2),A0               ; string
  285.         Move.l  #1,D0                   ; count
  286.         Jsr     Text(A6)                ; A1=RastPort
  287.  
  288. Bra2:   Lea     Copperlist+6,A1
  289.         Lea     Scrolltext-1(PC),A0
  290.  
  291. ; Scrollen des grossen Schriftzueges
  292. ; er wird durch veraendern der HintergrundBitmap Startaddresse
  293. ; gescrollt.
  294.  
  295.         Tst.b   (A0)
  296.         Beq.s   Scrollrunter
  297.         Addi.w  #46,(A1)                ; Scrollwert * 46
  298.         Bra.s   Hochgescrollt
  299. Scrollrunter:
  300.         Subi.w  #46,(A1)                ; Scrollwert * 46
  301. Hochgescrollt:
  302.         Movem.l (sp)+,d0-d7/a0-a6
  303. Dummy:  Jmp     $ffffffff
  304.  
  305. Gfxlibname:
  306.         dc.b    "graphics.library",0
  307.  
  308. AktBuchstabe:
  309.         dc.b    $ff
  310.  
  311. Farbtabelle:
  312.         dc.w    $005,$006,$007,$008,$009,$00a,$00b,$00c,$00d,$00e,$00f
  313.         dc.w    $50f,$60f,$70f,$80f,$90f,$a0f,$b0f,$c0f,$d0f,$e0f,$f0f
  314.  
  315. TextScrollFeld:
  316.         dc.l    $dc09fffe       ; WAIT 8, 220
  317.         dc.l    $00e2b058       ; MOVE $b058 -> BPL1PTL
  318.         dc.l    $01800aaf       ; MOVE $aaf  -> COLOR0
  319.         dc.l    $de09fffe       ; WAIT 8, 222
  320.         dc.l    $0180086f       ; MOVE $86f  -> COLOR0
  321.         dc.l    $e609fffe       ; WAIT 8,230
  322.         dc.l    $01820fff       ; MOVE $fff -> COLOR1
  323.         dc.l    $e709fffe       ; WAIT 8,231
  324.         dc.l    $01820fdd       ; MOVE $fdd -> COLOR1
  325.         dc.l    $e809fffe       ; WAIT 8,232
  326.         dc.l    $01820fcc       ; MOVE $fbb -> COLOR1
  327.         dc.l    $e909fffe       ; WAIT 8,233
  328.         dc.l    $01820faa       ; MOVE $faa -> COLOR1
  329.         dc.l    $ea09fffe       ; WAIT 8,234
  330.         dc.l    $01820f99       ; MOVE $f99 -> COLOR1
  331.         dc.l    $eb09fffe       ; WAIT 8,235
  332.         dc.l    $01820f77       ; MOVE $f77 -> COLOR1
  333.         dc.l    $ec09fffe       ; WAIT 8,236
  334.         dc.l    $01820f66       ; MOVE $f55 -> COLOR1
  335.         dc.l    $ed09fffe       ; WAIT 8,237
  336.         dc.l    $01820f44       ; MOVE $f33 -> COLOR1
  337.         dc.l    $ee09fffe       ; WAIT 8,238
  338.         dc.l    $01820f33       ; MOVE $f11 -> COLOR1
  339.         dc.l    $ef09fffe       ; WAIT 8,239
  340.         dc.l    $01820f00       ; MOVE $f00 -> COLOR1
  341.         dc.l    $f609fffe       ; WAIT 8, 246
  342.         dc.l    $0180042f       ; MOVE $42f  -> COLOR0
  343.         dc.l    $f809fffe       ; WAIT 8, 248
  344.         dc.l    $01800000       ; MOVE $000  -> COLOR0
  345.  
  346. BobTab:
  347.  
  348.         dc.b    65,80,105,90    ; T 1
  349.         dc.b    80,90,90,120    ; T 2
  350.  
  351.         dc.b    110,80,120,120  ; H 3
  352.         dc.b    120,95,140,105  ; H 4
  353.         dc.b    140,80,150,120  ; H 5
  354.  
  355.         dc.b    155,85,165,115  ; E 6
  356.         dc.b    160,80,195,90   ; E 7
  357.         dc.b    165,95,185,105  ; E 8
  358.         dc.b    160,110,195,120 ; E 9
  359.  
  360.         dc.b    0,130,35,140    ; P 10
  361.         dc.b    30,135,40,150   ; P 11
  362.         dc.b    10,145,35,155   ; P 12
  363.         dc.b    0,145,10,170    ; P 13
  364.         dc.b    45,160,55,170   ; Punkt 14
  365.  
  366.         dc.b    60,130,95,140   ; R 15
  367.         dc.b    90,135,100,150  ; R 16
  368.         dc.b    60,145,95,155   ; R 17
  369.         dc.b    60,155,70,170   ; R 18
  370.         dc.b    90,155,100,170  ; R 19
  371.         dc.b    105,160,115,170 ; Punkt 20
  372.  
  373.         dc.b    120,135,130,165 ; O 21
  374.         dc.b    125,130,155,140 ; O 22
  375.         dc.b    150,135,160,165 ; O 23
  376.         dc.b    125,160,155,170 ; O 24
  377.         dc.b    165,160,175,170 ; Punkt 25
  378.  
  379.         dc.b    180,135,190,170 ; F 26
  380.         dc.b    185,130,220,140 ; F 27
  381.         dc.b    190,145,210,155 ; F 28
  382.         dc.b    215,160,225,170 ; Punkt 29
  383.  
  384.         dc.b    230,130,240,170 ; I 30
  385.         dc.b    245,160,255,170 ; Punkt 31
  386.  
  387.         dc.b    1
  388.         dc.b    0
  389.  
  390. ScrollText:
  391.         dc.b    "K-Seka Assembler Diskette von The P.R.O.F.I.  "
  392.         dc.b    "many greetings to ICI  "
  393. TextEnde:
  394.  
  395.  
  396. Hiermit moechte ich das Thema Bootblock, endgueltig beenden. Hab wieder
  397. viel zu viel geschrieben. Aber es ist halt auch eine interressante Sachen.
  398.  
  399. Der Bootblock ist etwas woran man Programmierer messen kann. Denn dort ist
  400. der Platz sehr begrenzt, und man muss mit alle Haken und Oesen arbeiten.
  401. Dort wird sich auch noch mehr tun.
  402. Es ist nur schade das es Leute gibt die dieses koennen, kurz zu
  403. Programmieren dafuer benutzen einen Virus zu schreiben.
  404.  
  405. Ich gebe zu das ich mich auch schon damit beschaeftigt habe. Ich habe auch
  406. schon einen Kleinen Virus selber gemacht, aber eben nur zu testzwecken. Ich
  407. habe dabei gemerkt das es wirklich schwer ist etwas so perfekt zu
  408. programmieren wie die Viren neuerer Generation, wie z.b den Butonic, oder
  409. den Revenge-Lamer. Aber wenn man so etwas kann gibt es einem noch lange
  410. nicht das Recht anderen den Spass zu verderben.
  411.  
  412. Deshalb bitte ich die Leute unter euch die bald besser programmieren
  413. lernen, und die Finessen des Amigas kennenlernen, doch bitte vom
  414. Virenschreiben abzusehen.
  415.  
  416. Naja, ich will jetzt keinen Moralischen kriegen, aber das gehoert auch
  417. dazu..
  418.  
  419. Schoenen Tag noch....
  420.  
  421.                 Jeff Kandle
  422.